﻿package frEngine.animateControler.particleControler.animate
{
    import __AS3__.vec.*;
    import flash.geom.*;
    import frEngine.animateControler.particleControler.*;
    import frEngine.math.*;

    public class ResultSelfRotate extends Object implements IParticleAnimate
    {
        private var _useRotateToVelocity:Boolean;
        private const templeVector3d:Vector3D;
        public static const instance:ResultSelfRotate = new ResultSelfRotate;

        public function ResultSelfRotate()
        {
            this.templeVector3d = new Vector3D();
            return;
        }// end function

        public function get objClass() : Class
        {
            return ResultSelfRotate;
        }// end function

        public function canOpen(param1:ParticleParams) : Boolean
        {
            return true;
        }// end function

        public function update(param1:ParticleStatus) : void
        {
            if (param1.isFaceCamera)
            {
                this.faceCameraRotate(param1);
            }
            else if (param1.useSelfRotate)
            {
                this.selfRotate(param1);
            }
            else
            {
                this.notSelfRotate(param1);
            }
            return;
        }// end function

        private function selfRotate(param1:ParticleStatus) : void
        {
            var _loc_4:ParticleItem = null;
            var _loc_5:Vector3D = null;
            var _loc_7:Quaternion = null;
            var _loc_8:Number = NaN;
            var _loc_9:Number = NaN;
            var _loc_10:Number = NaN;
            var _loc_11:Number = NaN;
            var _loc_12:Quaternion = null;
            var _loc_13:Number = NaN;
            var _loc_14:Number = NaN;
            var _loc_15:Number = NaN;
            var _loc_16:Number = NaN;
            var _loc_17:Quaternion = null;
            var _loc_2:* = param1.particleList;
            var _loc_3:* = _loc_2.length;
            var _loc_6:int = 0;
            _loc_6 = 0;
            while (_loc_6 < _loc_3)
            {
                
                _loc_4 = _loc_2[_loc_6];
                if (!_loc_4.visible)
                {
                }
                else
                {
                    _loc_12 = _loc_4.startRotate;
                    _loc_14 = _loc_12.x;
                    _loc_15 = _loc_12.y;
                    _loc_16 = _loc_12.z;
                    _loc_13 = _loc_12.w;
                    _loc_7 = _loc_4.selfRotate;
                    _loc_11 = _loc_7.w;
                    _loc_8 = _loc_7.x;
                    _loc_9 = _loc_7.y;
                    _loc_10 = _loc_7.z;
                    _loc_17 = _loc_4.resultRotate2;
                    _loc_17.w = _loc_13 * _loc_11 - _loc_14 * _loc_8 - _loc_15 * _loc_9 - _loc_16 * _loc_10;
                    _loc_17.x = _loc_13 * _loc_8 + _loc_14 * _loc_11 + _loc_15 * _loc_10 - _loc_16 * _loc_9;
                    _loc_17.y = _loc_13 * _loc_9 - _loc_14 * _loc_10 + _loc_15 * _loc_11 + _loc_16 * _loc_8;
                    _loc_17.z = _loc_13 * _loc_10 + _loc_14 * _loc_9 - _loc_15 * _loc_8 + _loc_16 * _loc_11;
                }
                _loc_6++;
            }
            return;
        }// end function

        private function notSelfRotate(param1:ParticleStatus) : void
        {
            var _loc_4:ParticleItem = null;
            var _loc_5:Vector3D = null;
            var _loc_6:int = 0;
            var _loc_7:Quaternion = null;
            var _loc_8:Quaternion = null;
            var _loc_2:* = param1.particleList;
            var _loc_3:* = _loc_2.length;
            _loc_6 = 0;
            while (_loc_6 < _loc_3)
            {
                
                _loc_4 = _loc_2[_loc_6];
                if (!_loc_4.visible)
                {
                }
                else
                {
                    _loc_7 = _loc_4.resultRotate2;
                    _loc_8 = _loc_4.startRotate;
                    _loc_7.x = _loc_8.x;
                    _loc_7.y = _loc_8.y;
                    _loc_7.z = _loc_8.z;
                    _loc_7.w = _loc_8.w;
                }
                _loc_6++;
            }
            return;
        }// end function

        private function faceCameraRotate(param1:ParticleStatus) : void
        {
            var _loc_4:ParticleItem = null;
            var _loc_5:Vector3D = null;
            var _loc_6:int = 0;
            var _loc_7:Quaternion = null;
            var _loc_8:Quaternion = null;
            var _loc_2:* = param1.particleList;
            var _loc_3:* = _loc_2.length;
            _loc_6 = 0;
            while (_loc_6 < _loc_3)
            {
                
                _loc_4 = _loc_2[_loc_6];
                if (!_loc_4.visible)
                {
                }
                else
                {
                    _loc_7 = _loc_4.resultRotate2;
                    _loc_8 = _loc_4.selfRotate;
                    _loc_7.x = _loc_8.x;
                    _loc_7.y = _loc_8.y;
                    _loc_7.z = _loc_8.z;
                    _loc_7.w = _loc_8.w;
                }
                _loc_6++;
            }
            return;
        }// end function

        public function init(param1:ParticleStatus, param2:ParticleParams) : void
        {
            this._useRotateToVelocity = param2.useRotateToVelocity && !param2.faceCamera;
            return;
        }// end function

    }
}
